接續昨天Day28,今天會使用建立好的實驗資料集來建置物件偵測模型並進行訓練與驗證。
在Day27時已參照這篇「TensorFlow 2 Object Detection API With Google Colab」文章並已在Google雲端硬碟上建立「工作區」,如下所示:
TensorFlow
├───models
├───scripts
│ └───preprocessing
│ └───generate_tfrecord.py
└───workspace
└───training_demo
├───annotations
│ └───label_map.pbtxt
├───exported-models
├───images
│ ├───test
│ │ └───測試圖片與對應標註之XML檔案
│ └───train
│ └───訓練圖片與對應標註之XML檔案
├───models
│ └───my_ssd_resnet50_v1_fpn
│ └───pipeline.config
└───pre-trained-models
└───ssd_resnet50_v1_fpn_640x640_coco17_tpu-8
接下來也是使用這個工作區來進行型態識別之物件偵測模型的建置,首先在workspace目錄下新增一個目錄「stock_pattern_recorginition」,內容於下:
workspace
└───stock_pattern_recorginition
├───annotations
│ └───label_map.pbtxt
├───exported-models
├───images
│ ├───test
│ │ └───測試圖片與對應標註之XML檔案
│ └───train
│ └───訓練圖片與對應標註之XML檔案
├───models
│ └───my_ssd_mobilenet_v2
│ └───pipeline.config
└───pre-trained-models
└───ssd_mobilenet_v2_320x320_coco17_tpu-8
與Day27案例不同,這邊預訓練模型改用SSD MobileNet v2 320x320以加快訓練速度(主要是因為參賽時間有限,另外也不知道Day28的實驗資料集是否能夠讓模型被訓練起來)。然後將SSD MobileNet v2 320x320模型放在pre-trained-models目錄下並複製其中pipeline.config檔案到my_ssd_mobilenet_v2目錄,接著修改pipeline.config內容:
num_classes: 1
batch_size: 16
fine_tune_checkpoint: "pre-trained-models/ssd_mobilenet_v2_320x320_coco17_tpu-8/checkpoint/ckpt-0"
fine_tune_checkpoint_type: "detection"
label_map_path: "annotations/label_map.pbtxt"
input_path: "annotations/train.record"
label_map_path: "annotations/label_map.pbtxt"
input_path: "annotations/test.record"
接著將資料集放在images目錄下。並在annotations目錄中新增label_map.pbtxt,其內容如下:
item {
id: 1
name: 'bottom'
}
然後從"TensorFlow\models\research\object_detection"資料夾複製"model_main_tf2.py"檔案並將其貼至stock_pattern_recorginition檔案夾中,從"TensorFlow\models\research\object_detection"複製"exporter_main_v2.py"檔案並將其貼至stock_pattern_recorginition檔案夾中。
上述檔案都已到位後,複製一份「第二十七天:簡述物件偵測技術.ipynb」來做修改,主要是調整路徑設定。修改後的版本放在「第二十九天:建置型態識別之物件偵測模型.ipynb」。
在Google Colab中開啟「第二十九天:建置型態識別之物件偵測模型.ipynb」,然後一步一步地執行程式碼儲存格。其中需要注意的程式碼儲存格說明於下。
執行這個儲存格後會跳出以下的對話框:
請選擇「連線至Google雲端硬碟」,之後會跳出一些授權程序,就請按照相關說明點選並同意授權。
在執行這個步驟之前,請先將兩個測試圖檔(分別命名為img1.jpg與img2.jpg)放入Google Colab的儲存空間(不是放在Google雲端硬碟上)。若沒有測試圖檔在步驟20時會發生錯誤。
到這一步就可以知道模型是否真實地訓練成功。執行後出現物件偵測結果:
從上圖可知已正確識別出底部型態。但這個模型因資料集的關係是過擬合(overfitting)的,因此無法應用於實際場合。